<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>笔试面试day_1</title>
    <style>
        /* 区块引用 */
        .markdown-body blockquote {
            color: rgb(50, 50, 50);
            padding: 5px;
            border: 1px solid rgb(223, 224, 227);
            background-color: rgb(250, 250, 250);
            border-left-width: 5px;
            font-size: 0.5em;
        }

        .markdown-body h1 {
            font-size: 1.2em;
            color: rgb(50, 50, 50);
            letter-spacing: 0.01em;
            padding: 0.5em;
        }

        .markdown-body h2 {
            font-size: 1em;
            color: rgb(50, 50, 50);
            letter-spacing: 0.01em;
            padding: 0.5em;
        }

        .markdown-body h3 {
            font-size: 0.8em;
            color: rgb(50, 50, 50);
            letter-spacing: 0.01em;
            padding: 0.5em;
        }

        .markdown-body h4 {
            font-size: 0.6em;
            color: rgb(50, 50, 50);
            letter-spacing: 0.01em;
            padding: 0.5em;
        }

        .markdown-body h5 {
            font-size: 0.5em;
            color: rgb(50, 50, 50);
            letter-spacing: 0.01em;
            padding: 0.5em;
        }

        /* 无序列表 */
        .markdown-body ol {}

        .markdown-body ol li {
            font-size: 0.6em;
            list-style: inside;
            padding: 0.3em;
            text-decoration: underline;
        }

        .markdown-body p code {
            font-family: 'Source code pro';
            border: 1px solid rgb(223, 224, 227);
            background-color: rgb(250, 250, 250);
            padding: 0px 0.3em;
            font-size: 0.6em;
        }

        .markdown-body p {
            font-size: 0.6em;
            padding: 0.2em;
        }

        /* 代码块 */
        .markdown-body pre {
            border: 1px solid rgb(223, 224, 227);
            background-color: rgb(250, 250, 250);
            padding: 0.5em;

        }

        .markdown-body pre code {
            font-family: 'Source code pro';
            background-color: rgb(250, 250, 250);
            letter-spacing: 0.1em;
            font-size: 0.7em;
            padding: 0px !important;
        }

        /* 无序列表 */
        .markdown-body ul {}

        .markdown-body ul li {
            font-size: 0.6em;
            list-style: inside;
            padding: 0.3em;
            text-decoration: underline;
        }

        .title {
            font-size: 2em;
            border-bottom: 1px solid black;
        }

        .markdown-body {
            font-size: 20px;
            padding: 0em 3em;
        }
    </style>
</head>

<body>
    <div class="markdown-body">
        <h1 class="title">笔试面试day_1</h1>
        <h1 id="1new的过程">1.new的过程</h1>
<hr>
<pre><code class="language-js">function H(){
//var obj = {}2.创建空对象
//obj._proto_ = H.prototype 3.将这个空对象的原型设置为构造函数的原型
//4.H.call(obj) 执行this 将this指向这个空对象
//5.返回结果  1.return基本数据类型 -&gt;返回创建的对象  2.return引用数据类型 -&gt;返回这个引用数据类型
}
var h = new H()//1.调用函数
</code></pre>
<h1 id="2作用域">2.作用域</h1>
<p>分为全局作用域和函数作用域</p>
<p><strong>特点1:全局作用域创建的变量回作为window对象的属性保存</strong></p>
<p><strong>特点2:创建的函数回作为window对象的方法保存</strong></p>
<h1 id="3宏微任务">3.宏微任务</h1>
<p>1.先执行宏任务（console.log, for(;;),promise.pending..）</p>
<p>2.遇settimeout,settimeinterval等微任务执行后再执行</p>
<p>3.执行微任务（promise.then || catch, async.await...）</p>
<p>4.按123顺序执行settimout, settimeinterval</p>
<h1 id="4原型和原型链">4.原型和原型链</h1>
<p>当一个对象调用一个方法的时候，会首先在自己的内部寻找，找不到，再去原型上找</p>
<h1 id="5call-bind-apply异同">5.call bind apply异同</h1>
<p><strong>同： 都是改变this指向</strong></p>
<p><strong>异： bind会产生一个新函数，而call apply不会</strong></p>
<p><strong>call，bind第二个参数要一个一个传入 而apply是传入一个数组</strong></p>
<h1 id="6this指向">6.this指向</h1>
<pre><code class="language-js">var name = &#39;Javascript&#39;;
function demo(){
    let name = &#39;CSS&#39;;
    let other = {
        name : &#39;HTML&#39;,
        fn : ()=&gt;{
            var name = &#39;Vue&#39;;
            console.log(this.name)
        }
    }
    return other
}
demo().fn()//winidows
</code></pre>
<h1 id="7严格模式">7.严格模式</h1>
<p><strong>&#39;use strict&#39;</strong></p>
<ol>
<li><p>消除Javascript语法的一些不合理、不严谨之处，减少一些怪异行为。</p>
</li>
<li><p>消除代码运行的一些不安全之处，保证代码运行的安全；</p>
</li>
<li><p>提高编译器效率，增加运行速度；</p>
</li>
<li><p>为未来新版本的Javascript做好铺垫。</p>
</li>
</ol>
<h1 id="8闭包">8.闭包</h1>
<p><strong>概念:有权访问另一个函数作用域中变量的函数</strong></p>
<pre><code class="language-js">function Foo(){
    var i = 2;
    return ()=&gt;{
        console.log(i++)
    }
}
var f1 = Foo();
var f2 = Foo();
f1(); //2
f2(); //2
f1(); //3
</code></pre>
<h1 id="9变量提升">9.变量提升</h1>
<pre><code class="language-js">function fn(){}//函数声明提升至顶端
var a = function(){}//函数表达式var a提升至顶端
var a = 100//var a提升至顶端
</code></pre>
<h1 id="10手撕eventemitter">10.手撕eventemitter</h1>
<pre><code class="language-js">function EventEmitter() {
    this.list = {}
    this.on = function(name, callback){
        var tmp = this.list[name] || []
        tmp.push(callback)
        this.list[name] = tmp
    }
    this.off = function(name, callback){
        var tmp = this.list[name]
        tmp = tmp.filter((item)=&gt;{
            return item !== callback
        })
        this.list[name] = tmp
    }
    this.once = function(name, callback){
        var fun = () =&gt; {
            callback()
            this.off(name, fun)
        }
        this.on(name, fun)
    }
    this.emit = function(name){
        var tmp = this.list[name]
        tmp.forEach(element =&gt; {
            element()
        });
    }
}
</code></pre>
<h1 id="11判断类型">11.判断类型</h1>
<p><strong>js类型包括基本Number，String，Boolean，Null，undefined，引用object（arr obj fun）</strong></p>
<pre><code class="language-js">typeof null = object//判断基本数据 引用返回obj
console.log(arr instanceof Array)//一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
console.log(obj.constructor == Object)//null，undefined除外
Object.prototype.toString.call() //所有数据类型
</code></pre>

    </div>
</body>

</html>